/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Ultima revision: $Rev: 28 $
 *      Fecha: $Date: 2011-11-13 08:23:56 +0000 (Sun, 13 Nov 2011) $
 * 
 * Archivo: PanelCategoria.java
 */

package GUI;

import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import Servicios.*;
import java.awt.event.ActionListener;

/**
 * Panel que contiene los elementos para desplegar las categorias disponibles
 * para un determinado usuario.
 * 
 * @author Jorge
 * @author Jonathan
 */
public class PanelCategoria extends javax.swing.JPanel {
    private final JPanel panelAnterior;
    private final Usuario usuarioActual;
    private JPanel pnlBotones;
    
    /** Creates new form PanelCategoria */
    public PanelCategoria( Usuario usuarioActual ) {
        this.usuarioActual = usuarioActual;
        initComponents();
        
        panelAnterior = FramePrincipal.cambiarPanel(this);
        
        // Poner el nombre del usuario
        lblNombre.setText(usuarioActual.obtenerUsuario());
        
        // Agregar las categorias disponibles para el usuario
        Servicios serviciosUsuario = FramePrincipal.obtenerServicios();
        String[] categorias = serviciosUsuario.obtenerNombreCategorias();
        
        pnlBotones = new JPanel();
        pnlBotones.setLayout( new GridLayout(0,1) );
        pnlCategorias.setViewportView(pnlBotones);
        
        for (String categoriaActual : categorias)
            agregarBotonCategoria(categoriaActual);
    }
    
    private void agregarBotonCategoria( String nombre ){
        JButton botonCategoria = new JButton(nombre);
        botonCategoria.setActionCommand(nombre);

        botonCategoria.addActionListener( new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ae) {
                new PanelServicios( ae.getActionCommand(), usuarioActual );
            }
        });
        pnlBotones.add(botonCategoria);
        pnlCategorias.setViewportView(pnlBotones);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblNombre = new javax.swing.JLabel();
        lblUsuario = new javax.swing.JLabel();
        lblEscoger = new javax.swing.JLabel();
        pnlCategorias = new javax.swing.JScrollPane();
        lblCerrarSesion = new javax.swing.JLabel();
        btnAgregarCategoria = new javax.swing.JButton();
        lblCambiarContrasena = new javax.swing.JLabel();

        lblNombre.setText("<Usuario>");

        lblUsuario.setFont(new java.awt.Font("Ubuntu", 1, 15));
        lblUsuario.setText("Usuario: ");

        lblEscoger.setText("Escoja una categoría");

        pnlCategorias.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        pnlCategorias.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        lblCerrarSesion.setForeground(java.awt.SystemColor.activeCaption);
        lblCerrarSesion.setText("Cerrar sesión");
        lblCerrarSesion.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        lblCerrarSesion.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lblCerrarSesionMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                lblCerrarSesionMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                lblCerrarSesionMouseExited(evt);
            }
        });

        btnAgregarCategoria.setText("Agregar categoria");
        btnAgregarCategoria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarCategoriaActionPerformed(evt);
            }
        });

        lblCambiarContrasena.setForeground(java.awt.SystemColor.activeCaption);
        lblCambiarContrasena.setText("Cambiar contraseña");
        lblCambiarContrasena.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        lblCambiarContrasena.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lblCambiarContrasenaMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                lblCambiarContrasenaMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                lblCambiarContrasenaMouseExited(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlCategorias, javax.swing.GroupLayout.PREFERRED_SIZE, 290, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lblNombre))
                    .addComponent(lblEscoger)
                    .addComponent(btnAgregarCategoria, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(lblCambiarContrasena)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 59, Short.MAX_VALUE)
                        .addComponent(lblCerrarSesion)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblUsuario)
                    .addComponent(lblNombre))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(lblEscoger)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pnlCategorias, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnAgregarCategoria)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCerrarSesion)
                    .addComponent(lblCambiarContrasena))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void lblCerrarSesionMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCerrarSesionMouseEntered
        Font f = lblCerrarSesion.getFont();
        f = f.deriveFont(Font.BOLD);
        lblCerrarSesion.setFont(f);
    }//GEN-LAST:event_lblCerrarSesionMouseEntered

    private void lblCerrarSesionMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCerrarSesionMouseExited
        Font f = lblCerrarSesion.getFont();
        f = f.deriveFont(Font.PLAIN);
        lblCerrarSesion.setFont(f);
    }//GEN-LAST:event_lblCerrarSesionMouseExited

    private void lblCerrarSesionMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCerrarSesionMouseClicked
        FramePrincipal.cambiarPanel(panelAnterior);
    }//GEN-LAST:event_lblCerrarSesionMouseClicked

    private void btnAgregarCategoriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarCategoriaActionPerformed
        // Pedir el nombre de la nueva categoria al usuario
        String nuevaCategoria = (String)JOptionPane.showInputDialog(
                this,
                "Ingrese el nombre de la nueva categoria:",
                "Agregar categoria",
                JOptionPane.PLAIN_MESSAGE,
                null,
                null,
                null );
        
        // Validar la nueva categoria
        if( nuevaCategoria.isEmpty() ){
            JOptionPane.showMessageDialog(this, "Debe de ingresar un nombre válido",
                    "Categoria invalida", JOptionPane.ERROR_MESSAGE);
            return;
        }
        
        // Agregar la nueva categoria
        if( FramePrincipal.obtenerServicios().agregarCategoria(nuevaCategoria) ){
            agregarBotonCategoria(nuevaCategoria);
        } else {
            JOptionPane.showMessageDialog(this, 
                    "No se pudo agregar la categoria " + nuevaCategoria,
                    "Categoria repetida",
                    JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnAgregarCategoriaActionPerformed

    private void lblCambiarContrasenaMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCambiarContrasenaMouseEntered
        Font f = lblCambiarContrasena.getFont();
        f = f.deriveFont(Font.BOLD);
        lblCambiarContrasena.setFont(f);
    }//GEN-LAST:event_lblCambiarContrasenaMouseEntered

    private void lblCambiarContrasenaMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCambiarContrasenaMouseExited
        Font f = lblCambiarContrasena.getFont();
        f = f.deriveFont(Font.PLAIN);
        lblCambiarContrasena.setFont(f);
    }//GEN-LAST:event_lblCambiarContrasenaMouseExited

    private void lblCambiarContrasenaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblCambiarContrasenaMouseClicked
        new CambiarContrasena( usuarioActual );
        
        // Regresar el label a su estado anterior
        lblCambiarContrasenaMouseExited(null);
    }//GEN-LAST:event_lblCambiarContrasenaMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarCategoria;
    private javax.swing.JLabel lblCambiarContrasena;
    private javax.swing.JLabel lblCerrarSesion;
    private javax.swing.JLabel lblEscoger;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblUsuario;
    private javax.swing.JScrollPane pnlCategorias;
    // End of variables declaration//GEN-END:variables
}
